package com.dys.test05;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * @className: com.dys.test02.ServerTest
 * @description: com.dys.test02
 * @author: pine cone
 * @version: v1.0.0
 * @createTime: 2024/08/21 下午8:53
 */
public class ServerTest {
    /**
     * 这是一个main()方法,是应用程序的入口
     *
     * @param args 方法的形参列表,是一个字符串数组,包含了从命令行传递给程序的参数
     */
    public static void main(String[] args) {
        // 1.创建套接字：指定服务器的端口号
        ServerSocket ss = null;
        InputStream is = null;
        ObjectInputStream ois = null;
        OutputStream os = null;
        DataOutputStream dos = null;
        try {
            ss = new ServerSocket(8848);
            // 2.等着客户端发来消息: 阻塞方法,等待接收客户端发过来的数据，什么时候接收到数据，什么时候程序往下执行
            // accept()返回值为一个Socket，这个Socket其实就是客户端的Socket
            // 接到这个Socket以后，客户端和服务器才真正产生了连接，才真正可以通信了
            Socket accept = ss.accept();

            // 3.读取客户端发来的数据
            is = accept.getInputStream();
            ois = new ObjectInputStream(is);

            // 读取客户端发送过来的数据
            User user = (User) (ois.readObject());
            boolean flag = false;

            // 对账号和密码进行验证
            if (user.getUsername().equals("张淑娜") && user.getPassword().equals("123")) {
                flag = true;
            }

            // 向客户端输出一句话：---》操作流---》输出流
            // 回复客户端，服务器收到消息了
            os = accept.getOutputStream();
            dos = new DataOutputStream(os);
            dos.writeBoolean(flag);
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        } finally {
            // 4.关流+关闭网络资源
            try {
                if (dos != null) {
                    dos.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                if (os != null) {
                    os.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                if (ois != null) {
                    ois.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                if (is != null) {
                    is.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                if (ss != null) {
                    ss.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
}
